package com.tonann.system.service;

import com.tonann.common.core.domain.TreeSelect;
import com.tonann.common.core.domain.entity.SysPlace;

import java.util.List;

/**
 * 空间位置管理 服务层
 *
 * @author tonann
 */
public interface ISysPlaceService
{
    /**
     * 查询空间位置管理数据
     *
     * @param place 空间位置信息
     * @return 空间位置信息集合
     */
    public List<SysPlace> selectPlaceList(SysPlace place);


    public  List<SysPlace> selectPlaceAll(SysPlace place);
    /**
     * 查询空间位置树结构信息
     *
     * @param place 空间位置信息
     * @return 空间位置树信息集合
     */
    public List<TreeSelect> selectPlaceTreeList(SysPlace place);

    /**
     * 构建前端所需要树结构
     *
     * @param places 空间位置列表
     * @return 树结构列表
     */
    public List<SysPlace> buildPlaceTree(List<SysPlace> places);

    /**
     * 构建前端所需要下拉树结构
     *
     * @param places 空间位置列表
     * @return 下拉树结构列表
     */
    public List<TreeSelect> buildPlaceTreeSelect(List<SysPlace> places);

    /**
     * 根据角色ID查询空间位置树信息
     *
     * @param roleId 角色ID
     * @return 选中空间位置列表
     */
    public List<Long> selectPlaceListByRoleId(Long roleId);

    /**
     * 根据空间位置ID查询信息
     *
     * @param placeId 空间位置ID
     * @return 空间位置信息
     */
    public SysPlace selectPlaceById(Long placeId);

    /**
     * 根据ID查询所有子空间位置（正常状态）
     *
     * @param placeId 空间位置ID
     * @return 子空间位置数
     */
    public int selectNormalChildrenPlaceById(Long placeId);

    /**
     * 是否存在空间位置子节点
     *
     * @param placeId 空间位置ID
     * @return 结果
     */
    public boolean hasChildByPlaceId(Long placeId);

    /**
     * 查询空间位置是否存在用户
     *
     * @param placeId 空间位置ID
     * @return 结果 true 存在 false 不存在
     */
    public boolean checkPlaceExistUser(Long placeId);

    /**
     * 校验空间位置名称是否唯一
     *
     * @param place 空间位置信息
     * @return 结果
     */
    public String checkPlaceNameUnique(SysPlace place);

    /**
     * 校验空间位置是否有数据权限
     *
     * @param placeId 空间位置id
     */
    public void checkPlaceDataScope(Long placeId);

    /**
     * 新增保存空间位置信息
     *
     * @param place 空间位置信息
     * @return 结果
     */
    public int insertPlace(SysPlace place);

    /**
     * 修改保存空间位置信息
     *
     * @param place 空间位置信息
     * @return 结果
     */
    public int updatePlace(SysPlace place);

    /**
     * 删除空间位置管理信息
     *
     * @param placeId 空间位置ID
     * @return 结果
     */
    public int deletePlaceById(Long placeId);

    List<SysPlace> selectPlaceByPlaceName(String placeName);

    List<SysPlace> selectPlaceByIds(List<Long> ids);
}
